//引入axios依赖
import axios from "axios";
import nProgress from "nprogress";
import "nprogress/nprogress.css";
//当前这种写法:默认引入另外一种写法(次函数返回值)
import { default as getUserTempId } from "@/utils/userTempld";
import store from "@/store";
//利用axios对象的create方法去创建axios实例(设置请求基础路径、超时的时间)
let request = axios.create({
  //基础路径
  baseURL: "/api",
  //超时的时间
  timeout: 5000,
});

//请求拦截器:何时触发,在请求发送之前
request.interceptors.request.use((config) => {
  //config->配置对象,需要把配置对象返回,如果不返回请求都发不了
  //config配置对象身上有一个请求头属性,可以给服务器携带公共参数
  // config.headers.token = 'haoge'

  //请求头携带公共参数:用户未登录唯一标识
  config.headers.userTempId = getUserTempId();
  //如果用户登录成功携带公共参数token
  if (store.state.user.token) {
    config.headers.token = store.state.user.token;
  }
  nProgress.start();
  return config;
});

//响应拦截器
request.interceptors.response.use(
  (response) => {
    //响应拦截器:成功的回调可以获取服务器的数据
    //一般可以简化数据
    nProgress.done();
    return response.data;
  },
  (error) => {
    //状态码->数字
    let status = error.response.data.status;
    //情况的判断
    switch (status) {
      case 404:
        alert("请求路径错误");
        break;
      case 403:
        alert("没有权限访问");
        break;
      case 500 || 501 || 502 || 504:
        alert("硅谷服务器挂了");
        break;
    }
    //失败响应拦截器:统一处理网络错误
    return Promise.reject(new Error(error.message));
  }
);

//对外暴露
export default request;
